<template>
  <div class="map-container">
    <div id="map" class="container"></div>
  </div>
</template>

<script>
  import axios from "axios";
  import * as mapv from "mapv";
  export default {
    name: "Map",
    components: {},
    data() {
      return {};
    },
    created() {},
    mounted() {
      this.$nextTick(() => {
        const map = this.$baseMap();
        axios
          .get(
            "https://cdn.jsdelivr.net/npm/mapv@2.0.12/examples/data/od-xierqi.txt"
          )
          .then((rs) => {
            let data = [];
            let timeData = [];

            rs = rs.data.split("\n");
            let maxLength = 0;
            for (let i = 0; i < rs.length; i++) {
              let item = rs[i].split(",");
              let coordinates = [];
              if (item.length > maxLength) {
                maxLength = item.length;
              }
              for (let j = 0; j < item.length; j += 2) {
                let x = (Number(item[j]) / 20037508.34) * 180;
                let y = (Number(item[j + 1]) / 20037508.34) * 180;
                y =
                  (180 / Math.PI) *
                  (2 * Math.atan(Math.exp((y * Math.PI) / 180)) - Math.PI / 2);
                if (x == 0 || y == NaN) {
                  continue;
                }
                coordinates.push([x, y]);
                timeData.push({
                  geometry: {
                    type: "Point",
                    coordinates: [x, y],
                  },
                  count: 1,
                  time: j,
                });
              }
              data.push({
                geometry: {
                  type: "LineString",
                  coordinates: coordinates,
                },
              });
            }

            let dataSet = new mapv.DataSet(data);

            let options = {
              strokeStyle: "rgba(53,57,255,0.5)",
              // globalCompositeOperation: 'lighter',
              shadowColor: "rgba(53,57,255,0.2)",
              shadowBlur: 3,
              lineWidth: 3.0,
              draw: "simple",
            };

            let mapvLayer = new mapv.MaptalksLayer(
              "mapv1",
              dataSet,
              options
            ).addTo(map);

            let dataSet2 = new mapv.DataSet(timeData);

            let options2 = {
              fillStyle: "rgba(255, 250, 250, 0.2)",
              globalCompositeOperation: "lighter",
              size: 1.5,
              animation: {
                stepsRange: {
                  start: 0,
                  end: 100,
                },
                trails: 3,
                duration: 5,
              },
              draw: "simple",
            };

            let mapvLayer2 = new mapv.MaptalksLayer(
              "mapv2",
              dataSet2,
              options2
            ).addTo(map);
          });
      });
    },
    methods: {},
  };
</script>
<style lang="scss" scoped>
  .map-container {
    .container {
      width: 100%;
      height: calc(100vh - 214px);
    }
  }
</style>
